Recorder 面板是 Chrome 97 引入的一个突破性功能——它可以录制、回放和导出你在浏览器中的操作。无需编写代码就能创建自动化测试脚本,还能导出为 Puppeteer 脚本进行 CI/CD 集成。
Recorder 的核心价值是将手动测试操作转化为可复现的自动化流程。
>> → More panels → Recorder)Create a new recordingStart recordingEnd recording| 交互类型 | 说明 | 自动捕获? |
|---|---|---|
| Click | 点击元素 | ✅ 自动 |
| Double click | 双击元素 | ✅ 自动 |
| Hover | 鼠标悬停 | ✅ 自动 |
| Change | 修改 <input>/<select>/<textarea> 值 | ✅ 自动 |
| KeyDown | 按键事件 | ✅ 自动 |
| Navigate | 页面导航 | ✅ 自动 |
| Scroll | 页面滚动 | ✅ 自动 |
| Wait for element | 等待元素出现 | 🆕 手动添加 |
| Wait for expression | 等待 JS 表达式结果为真 | 🆕 手动添加 |
| Assert element | 断言元素存在/可见/文本 | 🆕 手动添加 |
| Assert value | 断言输入值 | 🆕 手动添加 |
| Custom times | 设置各步骤之间的等待时间 | 配置项 |
Recorder 使用多种选择器来定位元素,按优先级排列:
| 选择器类型 | 示例 | 可靠性 |
|---|---|---|
| aria/ | aria/Accessible Name | ⭐⭐⭐ 最高 |
| text/ | text/提交订单 | ⭐⭐⭐ |
| xpath/ | xpath//*[@id="root"]/div[1] | ⭐⭐ |
| css | #submit-btn | ⭐⭐ |
| testid/ | testid/submit-button | ⭐⭐⭐ |
| id | #submit | ⭐⭐ |
| pierce/ | pierce/.shadow-btn (穿透 Shadow DOM) | ⭐⭐ (🆕) |
💡 推荐在组件中使用
data-testid属性,Recorder 会优先使用testid/选择器,这是最稳定可靠的元素定位方式。
Replay 按钮Chrome 114+ 中,Recorder 支持添加断言步骤:
这些断言在回放和导出脚本中都会生效,形成真正的自动化测试。
录制完成后,你可以手动编辑用户流程:
| 格式 | 用途 | 特点 |
|---|---|---|
| Puppeteer | Node.js 自动化测试 | 完整 API,支持无头 Chrome |
| @puppeteer/replay | 轻量回放 | 纯 JSON 格式,跨语言回放 |
| Puppeteer (including Lighthouse) | 性能测试脚本 | 导出带 Lighthouse 分析的脚本 |
导出的 Puppeteer 脚本可以直接集成到 CI/CD 流程:
// 导出的 Puppeteer 脚本示例
// 注意:Puppeteer v23+ 中 headless: 'new' 已移除,
// 使用 boolean 或 'shell'(对应旧版精简无头模式)
const puppeteer = require('puppeteer')
const { knownDevices } = puppeteer
;(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
// 设置设备
await page.emulate(knownDevices['iPhone 15'])
const recorder = {
async navigate(url) { await page.goto(url) },
async click(selector) {
await page.waitForSelector(selector)
await page.click(selector)
},
async change(selector, value) {
await page.waitForSelector(selector)
await page.type(selector, value)
}
}
await recorder.navigate('https://example.com')
await recorder.click('text/登录')
await recorder.change('input[name="email"]', 'test@example.com')
// ... 更多步骤
await browser.close()
})()Recorder 面板可以与 Performance 面板联动:
Measure performance 按钮这提供了一种可复现的性能分析方式——每次用完全相同的用户操作测量性能,消除了手动操作引入的差异。
你要测试用户登录流程的稳定性和性能。
1. 录制
Navigate: https://example.com/login
Click: text/登录按钮
Change: input[name="email"] → test@example.com
Change: input[name="password"] → ********
Click: text/确认登录
Assert element: text/欢迎回来 (等待登录成功后页面显示欢迎信息)2. 回放验证
点击 Replay,逐步检查每个步骤是否成功。
3. 性能测量
点击 Measure performance,等待自动回放和性能数据收集。查看 Performance Insights 中是否有长任务影响登录响应速度。
4. 导出 CI 脚本
导出为 Puppeteer 脚本,加入项目的 e2e 测试套件。
| 特性 | 版本 | 说明 |
|---|---|---|
| Assertion steps | Chrome 114+ | 录制中支持断言验证 |
| Conditional wait | Chrome 128+ | Wait for element 和 Wait for expression |
| Breakpoint replay | Chrome 126+ | 回放时在特定步骤暂停 |
| pierce selector | Chrome 112+ | 穿透 Shadow DOM 定位 Web Component 内部元素 |
| Lighthouse export | Chrome 112+ | 导出含 Lighthouse 的性能测试脚本 |
| JSON editing | Chrome 118+ | 以 JSON 格式直接编辑录制内容 |
| Step reordering | Chrome 115+ | 拖拽重排录制步骤 |
data-testid 属性,提高选择器稳定性Wait for element